home *** CD-ROM | disk | FTP | other *** search
- /* ------------------------------------------------------------------- *
- * Module Version : 2.00 *
- * Author : Andrea Pietsch *
- * Programming Language : Pure-C *
- * Copyright : (c) 1994, Andrea Pietsch, 56727 Mayen *
- * ------------------------------------------------------------------- */
-
- #include <sys_gem2.h>
- #include <string.h>
- #include "rsc_3d.h"
-
- /* ------------------------------------------------------------------- */
-
- OBJECT *rsc_button; /* Baum-Adresse */
- OBJECT *rsc_reiter; /* Baum-Adresse */
- OBJECT *rsc_rahmen1; /* Baum-Adresse */
- OBJECT *rsc_rahmen2; /* Baum-Adresse */
- OBJECT *rsc_boxchar; /* Baum-Adresse */
- OBJECT *rsc_text; /* Baum-Adresse */
- OBJECT *rsc_frame; /* Baum-Adresse */
- OBJECT *rsc_menu; /* Baum-Adresse */
- OBJECT *rsc_main; /* Baum-Adresse */
- OBJECT *rsc_info; /* Baum-Adresse */
- OBJECT *rsc_icon; /* Baum-Adresse */
-
- /* ------------------------------------------------------------------- */
-
- BYTE slider_buffer [20][30];
-
- /* -------------------------------------------------------------------
- * HandleDemo
- *
- * Erledigt die Verwaltung der "Reiter" und zeigt die verschiedenen
- * Erweiterten Typen an, die SysGem so drauf hat...
- * ------------------------------------------------------------------- */
-
- INT HandleObjects ( INT msg, INT button, DIALOG_INFO *inf )
-
- {
- switch ( msg )
- {
- case SG_START : /* ------------------------------------------
- * Voreinstellungen
- * ------------------------------------------ */
-
- SetText ( rsc_text, TE_EDTEXT, "Ein kleiner Test" );
- break;
-
- case SG_END : /* ------------------------------------------
- * Fenster schließen
- * ------------------------------------------ */
-
- switch ( button )
- {
- case -1 : return ( SG_CLOSE );
- default : break;
- }
- break;
-
- case SG_HELP : /* ------------------------------------------
- * User hat HELP gedrückt oder auf den HILFE-
- * Button geklickt
- * ------------------------------------------ */
-
- Alert ( ALERT_NORM, 1, "[3][ Noch keine Hilfe verfügbar! ][ [OK ]" );
- break;
-
- case SG_NEWDIAL : /* ------------------------------------------
- * Je nachdem, welcher Reiter angewählt wurde,
- * wird hier der richtige Dialog dazu einge-
- * tragen
- * ------------------------------------------ */
-
- switch ( button )
- {
- case RE_BUTTON1 : inf->tree = rsc_button; break;
- case RE_RAHMEN1 : inf->tree = rsc_rahmen1; break;
- case RE_RAHMEN2 : inf->tree = rsc_rahmen2; break;
- case RE_BOXCHAR : inf->tree = rsc_boxchar; break;
- case RE_TEXT : inf->tree = rsc_text; break;
- case RE_FRAME : inf->tree = rsc_frame; break;
- default : return ( SG_CONT );
- }
- return ( SG_TAKEDIAL );
- default : break;
- }
- return ( SG_CONT );
- }
-
- /* -------------------------------------------------------------------
- * HandleMenuLine
- *
- * Reagiert auf Clicks in die Menüzeile
- * ------------------------------------------------------------------- */
-
- INT HandleMenuLine ( INT item )
-
- {
- switch ( item )
- {
- case -1 : /* -----------------------------------------
- * User hat die HELP-Taste gedrückt
- * ----------------------------------------- */
- Alert ( ALERT_NORM, 1, "[3][ Noch keine Hilfe verfügbar! ][ [OK ]" );
- break;
-
- case ME_INFO : /* -----------------------------------------
- * Info darstellen
- * ----------------------------------------- */
- DoDialog ( rsc_info, 0, "|Programm-Info" );
- break;
-
- case ME_ENDE : /* -----------------------------------------
- * Programm beenden
- * ----------------------------------------- */
- return ( SG_TERM );
-
- case ME_WECHSELN : /* -----------------------------------------
- * Fenster wechseln ohne Auswahl
- * ----------------------------------------- */
- CycleWindow ( FALSE );
- break;
-
- case ME_WECHSELN2 : /* -----------------------------------------
- * Fenster wechseln mit Auswahl
- * ----------------------------------------- */
- CycleWindow ( TRUE );
- break;
-
- case ME_FONT : /* -----------------------------------------
- * Font wählen
- * ----------------------------------------- */
-
- FontSelect ( NULL, NULL, "Zeichensatz", "", FALSE );
- break;
-
- default : break;
- }
- return ( SG_CONT );
- }
-
- /* ------------------------------------------------------------------- */
-
- INT HandleWindow ( INT msg, WINDOW_INFO *inf )
-
- {
- LOCAL INT line = -1;
-
- switch ( msg )
- {
- case SG_END : /* -----------------------------------------
- * Fenster schließen
- * ----------------------------------------- */
-
- line = -1;
- return ( SG_CLOSE );
- case SG_LCLICK1 :
- case SG_LCLICK2 : /* -----------------------------------------
- * Zeile selektieren - wenn schon eine Zeile
- * selektiert ist, deselektieren
- * ----------------------------------------- */
-
- if ( line != -1 )
- {
- SetLineFlags ( inf->id, line, 0 );
- RedrawLine ( inf->id, line );
- line = -1;
- }
- if ( inf->line >= 0L )
- {
- line = (UINT) inf->line;
- SetLineFlags ( inf->id, line, 1 );
- RedrawLine ( inf->id, line );
- }
- break;
- }
- return ( SG_CONT );
- }
-
- /* -------------------------------------------------------------------
- * Normales Textfenster mit 100 Zeilen Text darstellen
- *
- * Das Redraw der Textzeilen wird - wie auch das Scrollen - von SysGem
- * automatisch übernommen
- * ------------------------------------------------------------------- */
-
- VOID MakeWindow1 ( VOID )
-
- {
- INT i;
- BYTE str [100];
-
- /* -----------------------------------------------------------------
- * Fenster öffnen
- * ----------------------------------------------------------------- */
-
- if ( OpenWindow ( 'norm', "|Textfenster", "", 0xfef, NULL, 8, TRUE, -1, -1, 1L, 1L, 40, 40, 300, 280, NULL, (RPROC) NULL, HandleWindow ) < 0 )
- {
- return;
- }
-
- /* -----------------------------------------------------------------
- * Die Liste aus Textzeilen erzeugen und ins Fenster 'linken'...
- * ----------------------------------------------------------------- */
-
- BeginListUpdate ( 'norm' );
- for ( i = 0; i < 100; i++ )
- {
- sprintf ( str, " Eine kleine Testzeile Nr. %3d zur Demonstration ", i + 1 );
- AddToList ( 'norm', str );
- }
-
- /* -----------------------------------------------------------------
- * Textfenster neu berechnen und wenn nötig, neuzeichnen
- * ----------------------------------------------------------------- */
-
- EndListUpdate ( 'norm' );
- }
-
- /* -------------------------------------------------------------------
- * Textfenster mit 20 Objektbäumen als Zeilen darstellen
- * Zum Ausrichten der Zeilen werden zwei Tabulatoren verwendet
- *
- * Das Redraw der Bäume wird - wie auch das Scrollen - von SysGem
- * automatisch übernommen
- * ------------------------------------------------------------------- */
-
- VOID MakeWindow2 ( VOID )
-
- {
- INT i;
- BYTE str [100];
-
- /* -----------------------------------------------------------------
- * Fenster öffnen, wie oben auch...
- * ----------------------------------------------------------------- */
-
- if ( OpenWindow ( 'nor2', "|Textfenster", "", NAME | MOVER | CLOSER | UPARROW | DNARROW | VSLIDE, NULL, 8, FALSE, -1, -1, 1L, 1L, 40, 40, 300, 230, NULL, (RPROC) NULL, HandleWindow ) < 0 )
- {
- return;
- }
-
- /* -----------------------------------------------------------------
- * Die Liste aus Textzeilen erzeugen und ins Fenster 'linken'...
- * Ebenso werden die beiden Tabulatoren für das Fenster eingestellt
- * ----------------------------------------------------------------- */
-
- BeginListUpdate ( 'nor2' );
- SetListTab ( 'nor2', 7, TAB_LEFT );
- SetListTab ( 'nor2', 28, TAB_RIGHT );
- for ( i = 0; i < 20; i++ )
- {
- sprintf ( str, "\tEine Testzeile Nr.\t%d", i + 1 );
- AddToList ( 'nor2', str );
- SetLineIcon ( 'nor2', i, rsc_icon, IC_BOX );
- }
-
- /* -----------------------------------------------------------------
- * Textfenster neu berechnen und wenn nötig, neuzeichnen
- * ----------------------------------------------------------------- */
-
- EndListUpdate ( 'nor2' );
- }
-
- /* ------------------------------------------------------------------- */
-
- INT HandleMain ( INT msg, INT button, DIALOG_INFO *inf )
-
- {
- UINT i;
-
- switch ( msg )
- {
- case SG_START : /* ------------------------------------------
- * Sliderbox vorbelegen und Textfelder löschen
- * ------------------------------------------ */
-
- for ( i = 0; i < 20; i++ )
- {
- sprintf ( slider_buffer [i], "*----+\tTestzeile Nr. %3d", i + 1 );
- slider_buffer [i][0] = 255;
- slider_buffer [i][1] = (BYTE)((LONG)( rsc_icon ) >> 24 );
- slider_buffer [i][2] = (BYTE)((LONG)( rsc_icon ) >> 16 );
- slider_buffer [i][3] = (BYTE)((LONG)( rsc_icon ) >> 8 );
- slider_buffer [i][4] = (BYTE)((LONG)( rsc_icon ) >> 0 );
- slider_buffer [i][5] = (BYTE) IC_BAR;
- }
- LinkSlider ( rsc_main, MA_UP, MA_DN, MA_SHOW, MA_HIDE, 20, MA_BOX, &slider_buffer [0][0], 30, TRUE );
- SetSliderTab ( rsc_main, MA_BOX, 5, TAB_LEFT );
- SelectSldItem ( rsc_main, MA_BOX, 0, FALSE );
-
- ClearEditFields ( rsc_main );
- break;
-
- case SG_SLIDER : /* ------------------------------------------
- * Eintrag in der Sliderbox, die angeklickt
- * wurde, selektieren
- * ------------------------------------------ */
-
- if ( button >= 0 ) /* War ein 'echter' Eintrag*/
- {
- SelectSldItem ( rsc_main, MA_BOX, button, TRUE );
- }
- break;
-
- case SG_END : /* ------------------------------------------
- * Button auswerten, der angeklickt wurde
- * ------------------------------------------ */
-
- switch ( button )
- {
- case -1 : /* Closer angeklickt */
- case MA_EXIT : /* ---------------------
- * Fragen, ob beenden
- * --------------------- */
- if ( Alert ( ALERT_NORM, 1, "[2][ Wirklich beenden? ][ [Ja | [Nein ]" ) == 1 )
- {
- return ( SG_TERM );
- }
- break;
-
- case MA_LIST : /* ---------------------
- * Listbox
- * --------------------- */
- Listbox ( " Dieses | ist | eine | Listbox | in | der | beliebig |"
- " viele | Zeilen | untergebracht| werden | können ", -1, -1, rsc_main, MA_LIST );
- break;
-
- case MA_OBJECT : /* ---------------------
- * Erweiterte Objekte
- * darstellen
- * --------------------- */
- MultipleDialog ( 'xobj', -1, -1, "|Objekttypen", "", rsc_reiter, RE_BUTTON1, rsc_button, -2, NULL, HandleObjects );
- break;
-
- case MA_WINDOW : /* ---------------------
- * Textfenster zeigen
- * --------------------- */
- MakeWindow1 ();
- break;
-
- case MA_ICONS : /* ---------------------
- * Iconfenster zeigen
- * --------------------- */
- MakeWindow2 ();
- break;
-
- default : break;
- }
- break;
- case SG_HELP : /* ------------------------------------------
- * User hat HELP gedrückt oder auf den HILFE-
- * Button geklickt
- * ------------------------------------------ */
-
- Alert ( ALERT_NORM, 1, "[3][ Noch keine Hilfe verfügbar! ][ [OK ]" );
- break;
-
- case SG_DRAGDROP : /* ------------------------------------------
- * Irgendwas wurde ins Fenster gezogen
- * laden wir's doch einfach mal...
- * Wenn Fenster schon offen, Fenster schließen
- * ------------------------------------------ */
-
- CloseWindowById ( 'file' );
-
- i = (UINT) Display ( inf->dd->data, "|Datei", inf->dd->data, 250, 'file', 30, 30, 300, 250, (APROC) NULL );
-
- /* ------------------------------------------
- * Protokollieren, welche Datei geladen wurde
- *
- * Wenn Log-Fenster schon offen
- * ------------------------------------------ */
-
- if ( GetHandle ( 'xlog' ) == -1 )
- {
- OpenLogWindow ( 'xlog', "|Drag & Drop Aktionen", "", 60, 12, 50, 50, (APROC) NULL );
- }
- wprintf ( 'xlog', "\nDatei: %s [%u Zeilen]", inf->dd->data, i );
- break;
- default : break;
- }
- return ( SG_CONT );
- }
-
- /* ------------------------------------------------------------------- */
-
- INT main ( VOID )
-
- {
- /* -----------------------------------------------------------------
- * Initialisieren...
- * ----------------------------------------------------------------- */
-
- if ( InitGem ( "", 'demo', "Demo" ) > 0 )
- {
- UseWindowSlider ();
- UseOwnEditFields ();
- SetKey ( 0L, 0L );
-
- /* -------------------------------------------------------------
- * Resource laden - eine normale, da keine Farbicons drin sind
- * wenn Farbicons, dann C_ICON.PRG in den Auto-Ordner und FALSE
- * auf TRUE setzen...
- * ------------------------------------------------------------- */
-
- if ( LoadResource ( "DEMO.RSC", FALSE ) >= 0 )
- {
- /* ---------------------------------------------------------
- * Dialog-Adressen ermitteln
- * --------------------------------------------------------- */
-
- rsc_button = RscAdr ( R_TREE, BUTTONS );
- rsc_reiter = RscAdr ( R_TREE, REITER );
- rsc_rahmen1 = RscAdr ( R_TREE, RAHMEN1 );
- rsc_rahmen2 = RscAdr ( R_TREE, RAHMEN2 );
- rsc_boxchar = RscAdr ( R_TREE, BOXCHARS );
- rsc_text = RscAdr ( R_TREE, TEXTE );
- rsc_frame = RscAdr ( R_TREE, FRAME );
- rsc_menu = RscAdr ( R_TREE, MENUE );
- rsc_main = RscAdr ( R_TREE, MAIN );
- rsc_info = RscAdr ( R_TREE, SGINFO );
- rsc_icon = RscAdr ( R_TREE, ICONS );
-
- /* ---------------------------------------------------------
- * Dialoge anmelden
- * --------------------------------------------------------- */
-
- NewDialog ( rsc_button );
- NewDialog ( rsc_reiter );
- NewDialog ( rsc_rahmen1 );
- NewDialog ( rsc_rahmen2 );
- NewDialog ( rsc_boxchar );
- NewDialog ( rsc_text );
- NewDialog ( rsc_frame );
- NewDialog ( rsc_main );
- NewDialog ( rsc_info );
- NewDialog ( rsc_icon );
-
- /* ---------------------------------------------------------
- * Menüzeile anmelden und darstellen
- * --------------------------------------------------------- */
-
- InitMenuLine ( rsc_menu );
- SetDeskTopMenu ( rsc_menu, HandleMenuLine );
-
- /* ---------------------------------------------------------
- * Logfenster öffnen
- * --------------------------------------------------------- */
-
- OpenLogWindow ( 'xlog', "|Drag & Drop Aktionen", "", 60, 12, 50, 50, (APROC) NULL );
- wprintf ( 'xlog', "Keine geladenen Dateien..." );
-
- /* ---------------------------------------------------------
- * Hauptdialog öffnen
- * --------------------------------------------------------- */
-
- if ( WindowDialog ( 'main', -1, -1, "|SysGem-Demo", "", TRUE, FALSE, rsc_main, NULL, -2, NULL, HandleMain ))
- {
- /* -----------------------------------------------------
- * Die Kontrolle an SysGem abgeben...
- * ----------------------------------------------------- */
-
- HandleSysGem ();
- }
- }
- else
- {
- /* ---------------------------------------------------------
- * Resource-Laden ist schiefgelaufen
- * --------------------------------------------------------- */
-
- Alert ( ALERT_NORM, 1, "[3][ Resource-Datei nicht gefunden! ][ [Abbruch ]" );
- }
-
- /* -------------------------------------------------------------
- * ...und wieder abmelden
- * ------------------------------------------------------------- */
-
- ExitGem ();
- }
- return ( 0 );
- }
-
- /* ------------------------------------------------------------------- */
-